/*
Date:20220412 13:10PM
key:第一次遍历让每个数字都尽可能回家。第二次就逐个位置看这个位置上的人是不是准确的。
*/
class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
        int len=nums.size();
        for(int i=0;i<len;i++)
        {
            while(nums[i]>0&&nums[i]<=len&&nums[nums[i]-1]!=nums[i])//大于0，在len内，不等，继续交换。
            {
                swap(nums[i],nums[nums[i]-1]);
            }
        }
        for(int i=0;i<len;i++)
        {
            if(i+1!=nums[i])
            {
                return i+1;
            }
        }
        return len+1;
    }
};